package health_system.health_system.service;

import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Path;
import java.util.stream.Stream;

/**
 * 文件存储服务接口
 * 负责处理媒体文件的存储和获取
 */
public interface FileStorageService {
    
    /**
     * 初始化存储
     */
    void init();
    
    /**
     * 保存文件
     * @param file 要保存的文件
     * @param directory 子目录路径
     * @return 文件保存后的URL
     */
    String store(MultipartFile file, String directory);
    
    /**
     * 加载所有文件
     * @return 文件路径流
     */
    Stream<Path> loadAll();
    
    /**
     * 加载文件
     * @param filename 文件名
     * @return 文件路径
     */
    Path load(String filename);
    
    /**
     * 以资源形式加载文件
     * @param filename 文件名
     * @return 文件资源
     */
    Resource loadAsResource(String filename);
    
    /**
     * 删除单个文件
     * @param filename 文件名
     * @return 是否删除成功
     */
    boolean delete(String filename);
    
    /**
     * 删除所有文件
     */
    void deleteAll();
    
    /**
     * 生成唯一文件名
     * @param originalFileName 原始文件名
     * @return 唯一文件名
     */
    String generateUniqueFileName(String originalFileName);
    
    /**
     * 存储媒体文件并返回访问URL
     *
     * @param fileData 文件数据
     * @param fileName 文件名
     * @param mediaType 媒体类型 (image, video, audio, file)
     * @return 文件访问URL
     * @throws IOException 如果存储过程中发生IO错误
     */
    String storeMediaFile(byte[] fileData, String fileName, String mediaType) throws IOException;
    
    /**
     * 获取文件的完整URL
     *
     * @param filePath 文件路径
     * @return 完整的访问URL
     */
    String getFileUrl(String filePath);
    
    /**
     * 删除存储的文件
     *
     * @param filePath 文件路径
     * @return 是否删除成功
     */
    boolean deleteFile(String filePath);
}